import type { IMessage, IMessageAttachment } from '../messages';
import type { RocketChatAssociationModel } from '../metadata';

export interface IMessageExtender {
	kind: RocketChatAssociationModel.MESSAGE;

	/**
	 * Adds a custom field to the message.
	 * Note: This key can not already exist or it will throw an error.
	 * Note: The key must not contain a period in it, an error will be thrown.
	 *
	 * @param key the name of the custom field
	 * @param value the value of this custom field
	 */
	addCustomField(key: string, value: any): IMessageExtender;

	/**
	 * Adds a single attachment to the message.
	 *
	 * @param attachment the item to add
	 */
	addAttachment(attachment: IMessageAttachment): IMessageExtender;

	/**
	 * Adds all of the provided attachments to the message.
	 *
	 * @param attachments an array of attachments
	 */
	addAttachments(attachments: Array<IMessageAttachment>): IMessageExtender;

	/**
	 * Gets the resulting message that has been extended at the point of calling it.
	 * Note: modifying the returned value will have no effect.
	 */
	getMessage(): IMessage;
}
